package behavioral.observer;

import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName: Child
 * @Description: 模拟被观察者：孩子
 * @Author: liu-hao
 * @Date: 2023-04-09 10:36
 * @Version: 1.0
 **/
public class Child implements Observable {

    // 是否哭
    private boolean cry = false;

    // 被观察者必须维护一个观察者集合，用于事件响应通知
    private List<Observer> observers = new ArrayList<>();

    public Child() {
    }

    public boolean isCry() {
        return cry;
    }

    public void wakeUp() {
        // TODO: 补充自己的业务逻辑，进行判断是否通知观察者
        this.cry = true;
        System.out.println("孩子醒了，通知所有观察者！");
        // 消息更新，通知所有观察者
        notifyObserver();
    }

    @Override
    public void registerObserver(Observer o) {
        observers.add(o);
    }

    @Override
    public void removeObserver(Observer o) {
        if (!observers.isEmpty()) {
            observers.remove(o);
        }
    }

    @Override
    public void notifyObserver() {
        // 被观察者触发的事件
        WakeUpEvent wakeUpEvent = new WakeUpEvent(System.currentTimeMillis(), "bed", this);
        for (Observer o : observers) {
            o.actionOnWakeUp(wakeUpEvent);
        }
    }
}
